package controller;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import model.Order;
import model.Subject;
import service.OrderService;
import service.SubjectService;
import service.UserService;
import service.impl.OrderServiceImpl;
import service.impl.SubjectServiceImpl;
import service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.List;

/**
 * @author gzp
 * @create 2022-12-14 12:57
 */
@WebServlet("/order/listByStudent")
public class OrderListByStudentServlet extends HttpServlet {
    OrderService orderService = new OrderServiceImpl();
    UserService userService = new UserServiceImpl();
    SubjectService subjectService = new SubjectServiceImpl();

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置字符格式
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        //以字符流的形式接收数据
        BufferedReader reader = new BufferedReader(req.getReader());
        StringBuilder json = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            json.append(line);
        }
        //将接收的数据转换为json对象方便后面获取
        JSONObject jsonObject = JSON.parseObject(json.toString());

        //从json对象中以键值对的方式获取数据
        int pageIndex = jsonObject.getInteger("pageIndex");
        int uid = jsonObject.getInteger("uid");

        List<Order> orders = orderService.selectByUid(uid, pageIndex, 3);

        for (Order order : orders) {
            Subject subject = subjectService.get(order.getSid());
            order.setUser(userService.findById(subject.getUid()));
            order.setSubject(subject);
        }

        int count = orderService.countByUid(uid);

        //创建一个用来传数据的JSON对象
        JSONObject message = new JSONObject();

        //向前端发送正确的状态以及要跳转的页面
        message.put("orderList", orders);
        message.put("count", count % 3 != 0 ? count / 3 + 1 : count / 3);
        resp.getWriter().write(message.toString());
    }
}
